package pe.org.cnl.congreso.controller;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import pe.org.cnl.congreso.dao.EstatusPagoDAO;
import pe.org.cnl.congreso.model.Estatuspago;
import pe.org.cnl.congreso.model.Participante;
import pe.org.cnl.congreso.service.EstatusPagoService;
import pe.org.cnl.congreso.service.ParticipanteService;

@Controller
public class ParticipantesController {

	private static final Logger logger = Logger.getLogger(ParticipantesController.class);
	
	@Autowired
	private ParticipanteService participanteService;

	@Autowired
	private EstatusPagoService estatusPagoService;
	
	@RequestMapping(value = "participantes/lista.htm")
	public String lista(HttpServletRequest request ,HttpServletResponse response, ModelMap model) {
		try {
			response.setContentType("text/html;charset=UTF-8");
			/* WINDOWS 
			 * text/html;charset=UTF-8 sale muy bien los 
			 * caracteres cuando se han cargado desde excel sin convertir
			 * */
	        request.setCharacterEncoding("UTF8");
			logger.debug("lista de participantes");
			model.put("lParticipantes",  participanteService.listarParticipantesCompleto( null ));			
		} catch (Exception e) {
			e.printStackTrace();
			model.put("msgError", "Error: "+e.getMessage());
		}finally{
			model.put("lPaises",  participanteService.listarPaises() );
			model.put("lEstados",  participanteService.listarEstados() );
			model.put("participante",  new Participante() );
		}		
		return "l_asistentes";
	}
	
	
	@RequestMapping(value = "participantes/filtrar.htm")
	public String filtrar( @Valid Participante participante, BindingResult result, HttpServletRequest request ,HttpServletResponse response, ModelMap model) {
		try {
			response.setContentType("text/html;charset=UTF-8");
	        request.setCharacterEncoding("UTF8");
			logger.debug("lista de participantes");
			model.put("lParticipantes",  participanteService.listarParticipantesCompleto( participante ));
		} catch (Exception e) {
			e.printStackTrace();
			model.put("msgError", "Error: "+e.getMessage());
		}finally{
			model.put("lPaises",  participanteService.listarPaises() );
			model.put("lEstados",  participanteService.listarEstados() );
			model.put("participante",  participante );	
		}
		return "l_asistentes";
	}
	
	
	@RequestMapping(value = "participantes/ver.htm")
	public String ver(HttpServletRequest request , HttpServletResponse response,ModelMap model) {
		try {
			response.setContentType("text/html;charset=UTF-8");
	        request.setCharacterEncoding("UTF8");
	    	logger.debug("vista  de participante ");
			Integer idParticipante = Integer.parseInt( request.getParameter("cod"));
			model.put("participante",  participanteService.obtenerParticipanteCompleto(idParticipante));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "participanteDetalle";
		
	}
	
	@RequestMapping(value = "participantes/editar.htm")
	public String editar(HttpServletRequest request ,HttpServletResponse response ,  ModelMap model) {
		Integer idParticipante = null;
		try {
			response.setContentType("text/html;charset=UTF-8");
	        request.setCharacterEncoding("UTF8");
			logger.debug("editar participante ");
			idParticipante = Integer.parseInt( request.getParameter("cod"));
			model.put("participante",  participanteService.obtenerParticipanteCompleto(idParticipante));
			//listastatuspago		
			model.put("lStatus",  estatusPagoService.listar() );
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "r_asistentes_extra";
		
	}
	
	@RequestMapping(value = "participantes/grabar.htm" , method=RequestMethod.POST)
	public String grabar(@Valid Participante participante, BindingResult result, HttpServletRequest request , HttpServletResponse response, ModelMap model) {
		logger.debug("grabar cambios en participante ");
		try {
			//model.put("participante",  participanteService.obtenerParticipantes(idParticipante));
			Participante par = participanteService.obtenerParticipantes(participante.getIdParticipante() );
			
			par.setObservaciones( participante.getObservaciones() );
			par.setCodVisa( participante.getCodVisa() );
			par.setEstadoTransaccion( participante.getEstadoTransaccion());
			par.setTipoComprobante( participante.getTipoComprobante());
			par.setDineroFaltante( participante.getDineroFaltante());
			par.setStatusPago( participante.getStatusPago());
			par.setEstatuspago( new Estatuspago( participante.getEstatuspago().getIdStatus() ) );
			par.setObservaciones( participante.getObservaciones());
			par.setIsImportante( participante.getIsImportante());
			par.setReunionesPrevias( participante.getReunionesPrevias() );
		/*	par.setNombre( Utiles.toUtf8( participante.getNombre() ));
			logger.debug( "NORMAL " + participante.getNombre() + " UTF-8 " + Utiles.toUtf8( participante.getNombre()) + " ISO " +  Utiles.toIso88591( participante.getNombre()) );
			par.setPaterno( Utiles.toUtf8(  participante.getPaterno()));
			logger.debug( "NORMAL " + participante.getPaterno() + " UTF-8 " + Utiles.toUtf8( participante.getPaterno()) + " ISO " +  Utiles.toIso88591( participante.getPaterno()) );
			par.setMaterno( Utiles.toUtf8(  participante.getMaterno() ));
			logger.debug( "NORMAL " + participante.getMaterno() + " UTF-8 " + Utiles.toUtf8( participante.getMaterno()) + " ISO " +  Utiles.toIso88591( participante.getMaterno()) );
			*/
			par.setIdtransferenciaBancaria( Integer.parseInt( request.getParameter("idtransferenciaBancaria")));
			par.setBanco( request.getParameter("banco"));
			par.setFechaDeTransferencia( request.getParameter("fechaDeTransferencia"));
			
			par.setCargo( participante.getCargo());			
			par.setFecModificacion( new Date() );
			
			participanteService.registrarParticipante(par);
			
			model.put("mensaje", "Los datos fueron actualizados");	
		} catch (Exception e) {
			e.printStackTrace();
			model.put("msgError", "Error : " + e.getMessage() );
			model.put("participante",  participante);	
			return "r_asistentes_extra";
		}
		return lista(request,response,model);
		
	}
	
}
